package pl.edu.pk.psb.bc.assembler;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import pl.edu.pk.psb.bc.bo.CenaBo;
import pl.edu.pk.psb.bc.ds.OdlegloscDs;
import pl.edu.pk.psb.bc.ds.PrzystanekDs;
import pl.edu.pk.psb.bc.dto.OdlegloscDto;
import pl.edu.pk.psb.bc.dto.PrzystanekDto;

@Component
public class OdlegloscAssembler {

	@Autowired
	PrzystanekAssembler przystanekAssembler;
	
	@Autowired
	CenaBo cenaBo;
	
	public OdlegloscDto konwertuj(OdlegloscDs ds) {
		OdlegloscDto dto = new OdlegloscDto();
		dto.setOdlegloscDto(ds.getOdleglosc());
		dto.setId(ds.getId());
		dto.setPrzystanekKonc(przystanekAssembler.konwertuj(ds.getPrzystanekKonc()));
		dto.setPrzystanekPocz(przystanekAssembler.konwertuj(ds.getPrzystanekPocz()));
		dto.setCena(cenaBo.pobierzCenePrzejazdu(ds.getPrzystanekPocz().getId(), ds.getPrzystanekKonc().getId()));
		return dto;
	}
	
//	private OdlegloscDs konwertuj(OdlegloscDto dto) {
//		OdlegloscDs ds = new OdlegloscDs();
//		ds.setOdleglosc(dto.getOdlegloscDto());
//		ds.setPrzystanekPocz(przystanekAssembler.konwertuj(dto.getPrzystanekPocz()));
//		ds.setPrzystanekKonc(przystanekAssembler.konwertuj(dto.getPrzystanekKonc()));
//		return ds;
//	}

	public OdlegloscDs konwertuj(OdlegloscDto dto, PrzystanekDs przystPoczDs) {
		OdlegloscDs ds = new OdlegloscDs();
		ds.setOdleglosc(dto.getOdlegloscDto());
		ds.setPrzystanekPocz(przystPoczDs);
		ds.setPrzystanekKonc(przystanekAssembler.konwertuj(dto.getPrzystanekKonc()));
		return ds;
	}
	
	public Set<OdlegloscDto> konwertujDoDto(Set<OdlegloscDs> ds) {
		Set<OdlegloscDto> dto = new HashSet<OdlegloscDto>();
		for (OdlegloscDs OdlegloscDs : ds) {
			dto.add(konwertuj(OdlegloscDs));
		}
		return dto;
	}
	
	public Set<OdlegloscDs> konwertujDoDs(Set<OdlegloscDto> dto, PrzystanekDs przystPoczDs) {
		Set<OdlegloscDs> listaDs = new HashSet<OdlegloscDs>();
		for (OdlegloscDto OdlegloscDto : dto) {
			listaDs.add(konwertuj(OdlegloscDto, przystPoczDs));
		}
		return listaDs;
	}
	
	public List<OdlegloscDto> konwertujDoListyDto(List<OdlegloscDs> ds) {
		List<OdlegloscDto> dto = new ArrayList<OdlegloscDto>();
		for (OdlegloscDs OdlegloscDs : ds) {
			dto.add(konwertuj(OdlegloscDs));
		}
		return dto;
	}
	

//	public Set<OdlegloscDs> konwertuj(Set<OdlegloscDto> dto, PrzystanekDs ds2) {
//		Set<OdlegloscDs> listaDs = new HashSet<OdlegloscDs>();
//		for (OdlegloscDto OdlegloscDto : dto) {
//			listaDs.add(konwertuj(OdlegloscDto, ds2));
//		}
//		return listaDs;
//	}
}
